﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL;
using BLL;
using System.Xml.Linq;

public partial class admin_ConfigProduct_ListSize : System.Web.UI.Page
{
  SizeBLL sizeData = new SizeBLL();
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
      Session["url_back_admin"] = Request.RawUrl;
      LoadMode();
      ShowData();
    }
  }

  private void LoadMode()
  {
      dropMode.Items.Clear();
      ShowChild(0, " - - ");
  }
  ProdCateBLL categoryData = new ProdCateBLL();
  private void ShowChild(int parentId, string space)
  {
      List<ProdCate> listDataSource = categoryData.GetByParent(parentId);

      foreach (ProdCate item in listDataSource)
      {
          ListItem obj = new ListItem(space + item.Name, item.Id.ToString());
          dropMode.Items.Add(obj);

          ShowChild(item.Id, space + "- - - ");
      }
  }
  //private void LoadMode()
  //{
  //  dropMode.Items.Clear();
  //  XElement xElement = XElement.Load(MyConfig.serverPath + "XML/Config.xml");
  //  var xPosition = xElement.Descendants("ProductMode").Descendants("Mode");
  //  foreach (XElement item in xPosition)
  //  {
  //    dropMode.Items.Add(new ListItem(item.Element("Name").Value, item.Attribute("Id").Value));
  //  }
  //}
  private void ShowData()
  {
    int mode = -1;
    int PageRow = Convert.ToInt32(dropPageSize.SelectedValue);
    gridView.PageSize = PageRow;
    if (dropMode.Items.Count > 0)
      mode = Convert.ToInt32(dropMode.SelectedValue);

    if (mode != -1)
      gridView.DataSource = sizeData.GetByMode(mode);
    else
      gridView.DataSource = sizeData.GetAll();
    gridView.DataBind();
  }
  protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
  {
    lbThongBao.Text = "";
    try
    {
      gridView.PageIndex = e.NewPageIndex;
      ShowData();
    }
    catch { }
  }
  protected void gridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
  {
    if ((int)Session["Role"] != 1)
    {
      lbThongBao.Text = "Bạn không có quyền thực hiện thao tác này ! ";
      return;
    }
    try
    {
      lbThongBao.Text = "";
      int id = Convert.ToInt32(gridView.Rows[e.RowIndex].Cells[2].Text);
      ProductBLL productData = new ProductBLL();
      int count = productData.GetBySize(id).Count;
      if (count > 0)
      {
        Myfunction.ThongBao(lbThongBao, "Hiện tại có " + count + " sản phẩm có trạng thái này ! Bạn phải xóa các sản phẩm đó trước khi xóa cấu hình trạng thái");
        return;
      }

      sizeData.Delete(id);
      Myfunction.ThongBao(lbThongBao, "Màu sắc đã được xóa");

      ShowData();
    }
    catch (Exception ex)
    {
      Myfunction.ThongBao(lbThongBao, ex.Message);
    }
  }

  protected void btnAdd_Click(object sender, EventArgs e)
  {
    Response.Redirect("~/admin/ConfigProduct/DetailSize.aspx");
  }

  protected void btnXoaChon_Click(object sender, EventArgs e)
  {
    if ((int)Session["Role"] != 1)
    {
      lbThongBao.Text = "Bạn không có quyền thực hiện thao tác này ! ";
      return;
    }
    try
    {
      lbThongBao.Text = "";
      foreach (GridViewRow item in gridView.Rows)
      {
        foreach (Control ctrl in item.Cells[1].Controls)
        {
          if (ctrl.GetType() == typeof(CheckBox))
          {
            CheckBox check = (CheckBox)ctrl;
            if (check.Checked)
            {
              int id = Convert.ToInt32(item.Cells[2].Text);
              sizeData.Delete(id);
            }
            break;
          }
        }
      }
      ShowData();
    }
    catch (Exception ex)
    {
      Myfunction.ThongBao(lbThongBao, ex.Message);
    }
  }
  protected void linkCheckAll_Click(object sender, EventArgs e)
  {
    lbThongBao.Text = "";
    foreach (GridViewRow item in gridView.Rows)
    {
      foreach (Control ctrl in item.Cells[1].Controls)
      {
        if (ctrl.GetType() == typeof(CheckBox))
        {
          CheckBox check = (CheckBox)ctrl;
          check.Checked = true;
          break;
        }
      }
    }
  }
  protected void linkUnCheckAll_Click(object sender, EventArgs e)
  {
    lbThongBao.Text = "";
    foreach (GridViewRow item in gridView.Rows)
    {
      foreach (Control ctrl in item.Cells[1].Controls)
      {
        if (ctrl.GetType() == typeof(CheckBox))
        {
          CheckBox check = (CheckBox)ctrl;
          check.Checked = false;
          break;
        }
      }
    }
  }
  protected void dropCountRow_SelectedIndexChanged(object sender, EventArgs e)
  {
    lbThongBao.Text = "";
    gridView.PageSize = Convert.ToInt32(dropPageSize.SelectedValue);
    ShowData();
  }
  protected void dropMode_SelectedIndexChanged(object sender, EventArgs e)
  {
    lbThongBao.Text = "";
    ShowData();
  }
  protected void gridView_RowCommand(object sender, GridViewCommandEventArgs e)
  {
    if ((int)Session["Role"] != 1)
    {
      lbThongBao.Text = "Bạn không có quyền thực hiện thao tác này ! ";
      return;
    }
    try
    {
      lbThongBao.Text = "";
      if (e.CommandName.Equals("Up"))
      {
        int index = Convert.ToInt32(e.CommandArgument);
        int idFirst = Convert.ToInt32(gridView.Rows[index].Cells[2].Text);
        int idSecond = Convert.ToInt32(gridView.Rows[index - 1].Cells[2].Text);

        if (sizeData.GetById(idFirst).Mode != sizeData.GetById(idSecond).Mode)
        {
          Myfunction.ThongBao(lbThongBao, "Chỉ được đổi thứ tự 2 size trong cùng 1 nhóm sản phẩm");
          return;
        }

        sizeData.SwapSort(idFirst, idSecond);
      }
      else if (e.CommandName.Equals("Down"))
      {
        int index = Convert.ToInt32(e.CommandArgument);
        int idFirst = Convert.ToInt32(gridView.Rows[index].Cells[2].Text);
        int idSecond = Convert.ToInt32(gridView.Rows[index + 1].Cells[2].Text);

        if (sizeData.GetById(idFirst).Mode != sizeData.GetById(idSecond).Mode)
        {
          Myfunction.ThongBao(lbThongBao, "Chỉ được đổi thứ tự 2 size trong cùng 1 nhóm sản phẩm");
          return;
        }

        sizeData.SwapSort(idFirst, idSecond);
      }
      ShowData();

    }
    catch (Exception ex)
    {
      Myfunction.ThongBao(lbThongBao, ex.Message);
    }
  }
}